﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UMLSynthesizer.LangAnalyzer.Elements;
using UMLSynthesizer.LangAnalyzer.Statements;

namespace UMLSynthesizer.LangAnalyzer.Expressions
{
    public enum ExpressionKinds
    {
        Add,
        AddAssign,
        AndAssign,
        ArrayCreation,
        ArrayInitializer,
        As,
        Assign,
        BitwiseAnd,
        BitwiseNot,
        BitwiseOr,
        Cast,
        CharacterLiteral,
        Conditional,
        Divide,
        DivideAssign,
        ElementReference,
        Equals,
        ExclusiveOr,
        ExclusiveOrAssign,
        FalseLiteral,
        Generic,
        GreaterThan,
        GreaterThanOrEqual,
        Invocation,
        LeftShift,
        LeftShiftAssign,
        LessThan,
        LessThanOrEqual,
        LogicalAnd,
        LogicalNot,
        LogicalOr,
        MemberAccess,
        Multiply,
        MultiplyAssign,
        Negate,
        NotEquals,
        NullLiteral,
        NumericLiteral,
        ObjectCreation,
        ObjectInitializer,
        OrAssign,
        Parenthesized,
        Plus,
        PostDecrement,
        PostIncrement,
        PreDecrement,
        PreIncrement,
        RightShift,
        RightShiftAssign,
        SizeOf,
        StringLiteral,
        Subtract,
        SubtractAssign,
        This,
        TrueLiteral
    }
    public interface IExpressionBase
    {
        ExpressionKinds Kind { get; }
        IExpressionBase ParentExpression { get; }
        IStatementBase ParentStatement { get; }
        IElementBase ParentElement { get; }
        IProjectElement ProjectOwner { get; }
    }
}
